package com.icangya.Utils;

import com.alibaba.fastjson.JSONArray;

import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * Created by cangya4 on 2017/4/27.
 */
public class FormatUtil {
    // 定义一个私有构造方法
    private FormatUtil() {

    }

    //定义一个静态私有变量(不初始化，不使用final关键字，使用volatile保证了多线程访问时instance变量的可见性，避免了instance初始化时其他变量属性还没赋值完时，被另外线程调用)
    private static volatile FormatUtil instance;

    //定义一个共有的静态方法，返回该类型实例
    public static FormatUtil getIstance() {
        // 对象实例化时与否判断（不使用同步代码块，instance不等于null时，直接返回对象，提高运行效率）
        if (instance == null) {
            //同步代码块（对象未初始化时，使用同步代码块，保证多线程访问时对象在第一次创建后，不再重复被创建）
            synchronized (FormatUtil.class) {
                //未初始化，则初始instance变量
                if (instance == null) {
                    instance = new FormatUtil();
                }
            }
        }
        return instance;
    }

    /**
     * JASONArray转List<int>
     * @param array
     * @return
     */
    public List<Integer> JASONArray2ListI(JSONArray array){
        List<Integer> result = new ArrayList<Integer>();
        for (int i=0;i<array.size();i++){
            result.add(array.getInteger(i));
        }
        return  result;
    }

    /**
     * e.g 2017-5-3 12:24:33 ==> 20170503
     * @param time
     * @return
     */
    public String timeFormate(String time){
        String[] listTime = time.split(" ")[0].split("-");
        String t0 = listTime[0];
        String t1 = listTime[1];
        String t2 = listTime[2];
        if (t1.length() == 1) {
            t1 = '0' + t1;
        }
        if (t2.length() == 1) {
            t2 = '0' + t2;
        }
        return t0+t1+t2;
    }


    /*
     * 将时间戳转换为时间
     */
    public static String stampToDate(String s){
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long lt = new Long(s);
        Date date = new Date(lt);
        res = simpleDateFormat.format(date);
        return res;
    }

    /**
     * 获取现在时间
     *
     * @return返回字符串格式 yyyy-MM-dd HH:mm:ss
     */
    public static String getStringDate() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        String dateString = formatter.format(currentTime);
        return dateString;
    }

    /**
     * 获取现在时间
     *
     * @return返回字符串格式 yyyyMMdd
     */
    public static String getDateyyyyMMdd() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
        String dateString = formatter.format(currentTime);
        return dateString;
    }

    /**
     * 获取现在时间
     *
     * @return返回字符串格式 yyyy-MM-dd
     */
    public static String getDateyyyy_MM_dd() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(currentTime);
        return dateString;
    }


    /**
     * 获取现在时间
     *
     * @return返回字符串格式 时间戳
     */
    public static long getDateTime() {

        return new Date().getTime();
    }

    public static Date getYesterday(){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        date = calendar.getTime();
        return date;
    }


    /**
     * 将手机号码中间的数字用星号代替
     * @param mobilePhone
     * @return
     */
    public static String changePhoneShow(String mobilePhone) {
     /*电话号码*/
        String mobile = mobilePhone;
        String str = "";
        for (int i = 0; i < mobile.length(); i++) {
            if (i == mobile.length()-11) {
                str += mobile.charAt(i);
            } else if(i == mobile.length()-10) {
                str += mobile.charAt(i);
            }else if(i == mobile.length()-9) {
                str += mobile.charAt(i);
            }else if(i == mobile.length()-3) {
                str += mobile.charAt(i);
            }else if(i == mobile.length()-2) {
                str += mobile.charAt(i);
            }else if(i == mobile.length()-1) {
                str += mobile.charAt(i);
            }else {
                str += "*";
            }
        }
//        System.out.println("电话号码：" + str);
        return str;
    }


    /**
     * 精确到毫秒的完整时间    如：yyyy-MM-dd HH:mm:ss.S
     */
    public static String FORMAT_FULL = "yyyy-MM-dd HH:mm:ss.S";

    /**
     * 获取时间戳
     */
    public static String getTimeString() {
        SimpleDateFormat df = new SimpleDateFormat(FORMAT_FULL);
        Calendar calendar = Calendar.getInstance();
        return df.format(calendar.getTime());
    }

   static Calendar calendar=null;

    /**
     * 获取日期年份
     * @param date 日期
     * @return
     */
    public static String getYear(Date date) {
        return String.valueOf(date.getYear());
    }
    /**
     * 功能描述：返回月
     *
     * @param date
     *            Date 日期
     * @return 返回月份
     */
    public static int getMonth(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }

    /**
     * 功能描述：返回日
     *
     * @param date
     *            Date 日期
     * @return 返回日份
     */
    public static int getDay(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 功能描述：返回小
     *
     * @param date
     *            日期
     * @return 返回小时
     */
    public static int getHour(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 功能描述：返回分
     *
     * @param date
     *            日期
     * @return 返回分钟
     */
    public static int getMinute(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MINUTE);
    }

    /**
     * 返回秒钟
     *
     * @param date
     *            Date 日期
     * @return 返回秒钟
     */
    public static int getSecond(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.SECOND);
    }

    /**
     * 功能描述：返回毫
     *
     * @param date
     *            日期
     * @return 返回毫
     */
    public static long getMillis(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getTimeInMillis();
    }

    /**
     * 生成唯一订单号   年月日时分秒毫秒+一位随机数
     * @param date
     * @return
     */
    public static String getOrderId(Date date){
        String orderId= getStringDate()+getMillis(date);
        Random random=new Random();
        int r=random.nextInt(10);
        return orderId+r;
    }
}
